#pragma once
#include <unordered_map>
#include <unordered_set>
#include <string>
#include <vector>
#include <mutex>

class UserManager {
private:
    std::unordered_map<int, std::string> fd_to_name;
    std::unordered_map<std::string, int> name_to_fd;
    std::vector<int> fds;
    std::unordered_set<int> admin_fds;
    std::mutex mtx;
    std::unordered_set<int> muted_users;
    std::unordered_set<std::string> banned_names;

public:
    void add_user(int fd);
    void remove_user(int fd);
    void rename_user(int fd, const std::string& newname);
    std::string get_name(int fd);
    int get_fd_by_name(const std::string& name);
    std::vector<int> get_all_fds();

    // 管理员控制
    void add_admin(int fd);
    bool is_admin(int fd);
    void mute_user(int fd);
    void unmute_user(int fd);
    bool is_muted(int fd);

    void ban_user(const std::string& name);
    void unban_user(const std::string& name);
    bool is_banned(const std::string& name);

    // 管理员检测与名字判断
    bool is_admin_name(const std::string& name);
    bool name_exists(const std::string& name);
};

extern UserManager user_manager;

